package ar.uade.fain.ai.tpo.dao;

import java.sql.PreparedStatement;
import java.sql.SQLException;

import ar.uade.fain.ai.tpo.model.ItemPedido;
import ar.uade.fain.ai.tpo.model.Pedido;

public class PedidoDAO {

	private static final String GET_NEXT_ID = 
			"SELECT ISNULL(MAX(IDPEDIDO), 0) + 1 AS ID FROM DELIVERY.DBO.PEDIDO";
	
	private static final String INSERT_PEDIDO = 
			"INSERT INTO DELIVERY.DBO.PEDIDO (IDPEDIDO, IDCLIENTE, FECHA, PRECIO) " +
			"VALUES (?,?,?,?)";

	private static final String INSERT_ITEM_PEDIDO = 
			"INSERT INTO DELIVERY.DBO.ITEMPEDIDO (IDPEDIDO, IDCOMIDA, CANTIDAD) " +
			"VALUES (?,?,?)";

	private DAOSupport support;
	
	public PedidoDAO() {
		super();
		this.support = DAOSupport.get();
	}
	
	protected DAOSupport getSupport() {
		return support;
	}
	
	public void guardar(final Pedido pedido) {
		final Long idPedido = getSupport().selectNextId(GET_NEXT_ID);
		getSupport().insert(INSERT_PEDIDO, 
				new ParameterSetter() {
			@Override
			public void setParametros(final PreparedStatement statement) 
					throws SQLException {
				statement.setLong(1, idPedido);
				statement.setLong(2, pedido.getCliente().getId());
				statement.setDate(3, new java.sql.Date(pedido.getFecha().getTime()));
				statement.setDouble(4, pedido.getPrecio());
			}
		});
		for (final ItemPedido item : pedido.getItems()) {
			getSupport().insert(INSERT_ITEM_PEDIDO, new ParameterSetter() {
				@Override
				public void setParametros(final PreparedStatement statement) 
						throws SQLException {
					statement.setLong(1, idPedido);
					statement.setLong(2, item.getComida().getId());
					statement.setInt(3, item.getCantidad());
				}
			});
		}
		pedido.setId(idPedido);
	}
	
}
